1. Field of the Invention
The present invention relates to distributed computing in a network having multiple computing nodes. More particularly, the present invention relates to providing service virtualization of client-server type computing services using a peer-to-peer architecture that relies on multiple computing nodes for sharing tasks associated with providing the client-server type computing services in a distributed environment.
2. Description of the Related Art
Distributed computing has evolved to technologies that enable multiple devices to share in providing a given service. One well-known example involves BitTorrent, where a single source file within a group of BitTorrent users, called a swarm, spreads portions of a large data file (e.g., a digital movie, etc.) such that all members of the swarm have a portion of the large data file (a “chunk”) to share. After the initial downloading of the portions to user computers, the portions of the data file are then uploaded to other users in the swarm that need the chunks. The BitTorrent rules require every user of the swarm that performs downloading to also do perform uploading. Hence, as more users attempt to download, the uploading capacity increases. Once all members of the swarm have shared all their chunks, all the members have their own complete source.
Hence, Bit-Torrent presumes that multiple copies of data are present on a peer-to-peer network; hence, it is presumed that the data will persist beyond the existence of the source that added the data to the network. Further, Bit-Torrent assumes that clients are unreliable and may disappear from the network, for example if a client device logs off the network. Consequently, Bit-Torrent relies on multiple copies of data on the network, where peers replicate the data to provide a larger distribution of the data.
Although BitTorrent has been demonstrated to be highly effective in applications such as file sharing, BitTorrent is modeled as a peer-to-peer application. Unlike client-server based applications such as web hosting, e-mail, etc., peer-to-peer applications are designed such that a peer client is configured for communicating with a destination peer client, and is not configured for obtaining any knowledge relating to network topology; hence, a peer client may be unaware that it is communicating with a cluster of servers. In addition, all peer devices must be online in order for any peer-to-peer services (e.g., instant messaging) to be operable. Hence, unlike client-server computing that relies on servers to provide persistent application state to enable management client transactions generated from client devices that have a limited network presence, there is no persistent state of client transactions in the network in peer-to-peer computing.
Hence, a fundamental problem between peer-to-peer computing and client-server computing involves reconciling the mutually incompatible features in a manner that would permit applying the advantages of peer-to-peer networking to client/server-based applications.
One technique utilized by UNIX programmers involves implementing server software on the same machine as a device executing client applications, referred to herein as a client device or user node. Unfortunately, attempts to implement servers on client devices are not practical, because the design of server protocols are inherently scarce resource protocols, and are not designed to scale with an exponential increase in the number of clients. For example, servers (e.g., Microsoft Exchange Servers) typically require persistent connections (e.g., TCP connections) between each other in order to synchronize data, where each additional server requires added connections between the new server and the existing servers, plus return connections, where the number of connections (N) between servers (S) is N=S*(S−1). Hence, a linear growth in the number of servers results in an exponential growth in the number of connections between the servers. Consequently, many enterprise-class applications utilize server-based protocols that require synchronization among multiple servers.
As described above, peer-to-peer applications are not configured for obtaining any knowledge relating to network topology, and cannot provide a persistent state of client transactions. Hence, client-server-based applications cannot readily be modified for deployment execution on a peer-to-peer type architecture. Further, if the client device is not present (i.e., logged onto the application service) the participation of that client device in the application service is nonexistent. In addition, existing messaging servers (e.g., AOL instant messenger) are utilized solely to provide directory services in identifying users, and do not participate in providing services related to the actual application (e.g., data transfer) between client devices.
Hence, a fundamental problem in the conventional technologies is that enterprise-level applications, and consumer-level applications are designed according to a client-server architecture model. As described above, the client-server architecture model inherently cannot be implemented in a scalable manner as distributed servers manner due to the exponential nature of synchronization.